goto

  C++拥有臭名昭著的goto语句:

goto identifier;
identifier : statement

goto在高级程序设计中极少有用,但是在那些不是由人写出,而是由某个程序生成出来的C++代码里就可能很有用处。例如,goto可能被用在一个由分析程序生成器生成语法的分析程序里。在一些罕见的优化性能极端重要的程序里,goto也可能非常重要,例如在某些实时应用的内层循环中。

  标号(label)的作用域是它所在的那个函数。这就意味着你能够利用goto跳进或者跳出一个块。仅有的限制就是你不能跳过初始式,也不能跳进异常处理程序(8.3.1节)。

  在常规代码中极少存在goto的有意义应用,这种情况之一是从嵌套的循环或者switch语句中退出来(break语句只能退出最内层的循环或者switch语句)。例如,

    void f()
    {
        int i;
        int j;
        for(i = 0; i < n; i++)
            for(j = 0; j < m; j++) 
                if(nm[i][j] == a) goto found;
        // not found
        // ...

    found:
        // nm[i][j] == a
    }

还有一种continue语句,实际上,它就是跳到一个循环语句的最后,如6.1.5节的解释。

🔚